/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proyecto;
/**
 *
 * @author Luis Romero
 */
public class CacheInstrucciones {
    MemoriaPrincipal memoriaP;

    private class instruccion{
        public int bloques[];
        public instruccion(){
            bloques = new int[4];
        }
        public int[] getInstruccion(){ return bloques; }
        public void setInstruccion(int bloques[]){ this.bloques = bloques; }
    }
    
    private instruccion cache[];
    private int etiqueta[];
    private boolean bitV[];

    public CacheInstrucciones(){
        cache = new instruccion[4];
        etiqueta = new int[4];
        for(int i=0;i<4;i++){
            cache[i] = new instruccion();
            etiqueta[i] = -1;
        }
        bitV = new boolean[4];       
    }

    public void setMemoria(MemoriaPrincipal mp){
        memoriaP = mp;
    }
    
    public void setMemoriaPrincipal(MemoriaPrincipal memoriaP){
        this.memoriaP = memoriaP;
    }
    
    public void setInstruccion(int[] instruccion,int pos){
        cache[pos].setInstruccion(instruccion);
    }
    
    public int[] getInstruccion(int etiq, int pos){
        int posicion = pos%4;
        if(etiqueta[posicion] == etiq){
            return cache[posicion].getInstruccion();
        }else{
            setInstruccion(memoriaP.cargarInstruccion(etiq), posicion);//llamado a memoria con etiq para devolver bloque
            return memoriaP.cargarInstruccion(etiq);
            //setInstruccion para guardar bloque en posicion
            //return instruccion
        }
    }
}
